import * as qiniu from 'qiniu-js'
import {Message} from 'element-ui'
import {getUploadImgAccess} from '@/api/common'
import store from '@/store'

export default {
  host: 'http://qath55nem.bkt.clouddn.com',
  getDir() {
    return store.getters.enums.ossDir[this.uploadTo]
  },
  uploadConfig: {
    useCdnDomain: true,   //表示是否使用 cdn 加速域名，为布尔值，true 表示使用，默认为 false。
    region: null    // 根据具体提示修改上传地区,当为 null 或 undefined 时，自动分析上传域名区域
  },
  //获取音视频播放URL
  getVideoPlayUrl(fileUrl) {
    return new Promise(((resolve, reject) => {
        getVideoPlayUrl(fileUrl).then((res) => {
          if (res.code === '200') {
            resolve(res.body)
          } else {
            Message.error(`${res.message},请联系技术处理`)
            reject()
          }
        }).catch(err => {
          reject()
        })
      })
    )
  },
/*  //获取音视频上传token
  getUploadVideoAccess() {
    return new Promise(((resolve, reject) => {
        getUploadVideoAccess({
          mediaType: this.mediaType,
          fileName:this.fileName,
          // objectType: this.getDir(),
        }).then((res) => {
          if (res.code === '200') {
            this.host = res.body.host
            this.fileDir = res.body.key
            resolve(res.body)
          } else {
            Message.error(`${res.message},请联系技术处理`)
            reject()
          }
        }).catch(err => {
          reject()
        })
      })
    )
  },*/
  //获取文件上传token
  getUploadImgAccess() {
    return new Promise(((resolve, reject) => {
        getUploadImgAccess(this.fileName).then((res) => {
          if (res.code === '200') {
            resolve(res.body)
          } else {
            Message.error(`${res.message},请联系技术处理`)
            reject()
          }
        }).catch(err => {
          reject()
        })
      })
    )
  },
  //选择文件后触发的事件
  upload(params) {
    this.mediaType = params.mediaType || 'image'
    this.isPrivate = params.isPrivate
    this.uploadTo = params.uploadTo
    this.uploadType = params.uploadType
    this.callback = params.callback || {}

    const file = params.value.file
    if (!file) {
      Message.error('请选择要上传的资源')
    }
    const suffix = file.type.split('/')[1]? `.${file.type.split('/')[1]}`: file.name.match(/\..*$/)[0]
    const fileName = `${+new Date()}_${Math.floor(Math.random() * 100000000)}${suffix}`
    this.fileName = fileName
    if (this.mediaType === 'video' && this.isPrivate) {
      this.getUploadVideoAccess().then(res => {
        this.qnUploadFile(res.uploadToken, file)
      })
    } else {
      this.getUploadImgAccess().then(res => {
        this.qnUploadFile(res, file)
      })
    }
  },

  qnUploadFile(uptoken, file) {
    let putExtra = {
      fname: "",  //文件原文件名
      params: {}, //用来放置自定义变量
      mimeType: null  //用来限制上传文件类型，为 null 时表示不对文件类型限制；限制类型放到数组里： ["image/png", "image/jpeg", "image/gif"]
    }
    this.normalUpload(file, uptoken, putExtra, this.uploadConfig)
  },
  normalUpload(file, uptoken, putExtra, config) {
    const observable = qiniu.upload(file, this.fileName, uptoken, putExtra, config);
    observable.subscribe({
      next: (result) => {
        // 主要用来展示进度
        // console.log(result)
        this.callback.progress && this.callback.progress(result.total)
      },
      error: (errResult) => {
        // 失败报错信息
        console.log(errResult)
        this.callback.error && this.callback.error(file)
      },
      complete: (result) => {
        // 接收成功后返回的信息
        switch (this.uploadType) {
          case 'normal':
            console.log(this.getUrl(result));
            this.callback.success(this.getUrl(result), file)
            break
          case 'watermark':
            this.callback.success(this.watermarkImglink(), file)
        }
      }
    })
  },
  watermarkImglink() {
    return qiniu.watermark({
      mode: 2,  // 文字水印
      text: 'BCKID', // 水印文字，mode = 2 时 **必需**
      dissolve: 50,          // 透明度，取值范围1-100，非必需，下同
      gravity: 'SouthWest',  // 水印位置，同上
      fontsize: 800,         // 字体大小，单位: 缇
      // font: '黑体',           // 水印文字字体
      dx: 100,               // 横轴边距，单位:像素(px)
      dy: 100,               // 纵轴边距，单位:像素(px)
      fill: '#FFF000'        // 水印文字颜色，RGB格式，可以是颜色名称
    }, this.fileName, this.host)
  },
  getUrl(res) {
    return `${this.host}/${res.key}`
  },
}
